home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
filesyst
/
umsdos
/
linux-1.31
< prev
next >
Wrap
Internet Message Format
|
1996-11-17
|
3KB
From mday@park.uvsc.edu Tue Jul 19 21:51:47 EDT 1994
Article: 12364 of comp.os.linux.development
Newsgroups: comp.os.linux.development
Path: bigblue.oit.unc.edu!concert!gatech!newsxfer.itd.umich.edu!sol.ctr.columbia.edu!news.kei.com!news.byu.edu!hamblin.math.byu.edu!park.uvsc.edu!mday
From: mday@park.uvsc.edu (Matt Day)
Subject: Re: Patchlevel 31 breaks UMSDOS [FIX]
Organization: Utah Valley State College, Orem, Utah
Date: Wed, 20 Jul 1994 03:23:09 GMT
Message-ID: <Ct7yqo.3H1@park.uvsc.edu>
References: <Ct7AE9.Fn7@ucdavis.edu>
Lines: 96
In article <Ct7AE9.Fn7@ucdavis.edu> slouken@cs.ucdavis.edu (Sam Oscar Lantinga) writes:
> The file linux/fs/msdos/mmap.c from the UMSDOS distribution
>contains references to share_map(), which no longer exists in patchlevel 31.
>It should be an easy fix, but I don't know where to start.
This patch gets UMSDOS 3.0 running on Linux 1.1.31:
--- fs/msdos/mmap.c- Tue Jul 19 16:13:06 1994
+++ fs/msdos/mmap.c Tue Jul 19 17:36:14 1994
@@ -19,13 +19,6 @@
#include <asm/system.h>
#include <linux/msdos_fs.h>
-extern int share_page(struct vm_area_struct * area, struct task_struct * tsk,
- struct inode * inode, unsigned long address, unsigned long error_code,
- unsigned long newpage);
-
-extern unsigned long put_page(struct task_struct * tsk,unsigned long page,
- unsigned long address,int prot);
-
extern void file_mmap_free(struct vm_area_struct * area);
extern int file_mmap_share(struct vm_area_struct * from, struct vm_area_struct * to,
unsigned long address);
@@ -33,33 +26,20 @@
/*
Perform the mapping of an adresse in memory
*/
-static void msdos_file_mmap_nopage(
- int error_code,
+static unsigned long msdos_file_mmap_nopage(
struct vm_area_struct * area,
- unsigned long address)
+ unsigned long address,
+ unsigned long page,
+ int error_code)
{
struct inode * inode = area->vm_inode;
unsigned int clear;
- unsigned long page;
int pos;
long gap; /* distance from eof to pos */
address &= PAGE_MASK;
pos = address - area->vm_start + area->vm_offset;
- page = __get_free_page(GFP_KERNEL);
- if (share_page(area, area->vm_task, inode, address, error_code, page)) {
- ++area->vm_task->mm->min_flt;
- return;
- }
-
- ++area->vm_task->mm->maj_flt;
- if (!page) {
- oom(current);
- put_page(area->vm_task, BAD_PAGE, address, PAGE_PRIVATE);
- return;
- }
-
clear = 0;
gap = inode->i_size - pos;
if (gap <= 0){
@@ -78,30 +58,19 @@
if (cur_read != need_read){
printk ("MSDOS: Error while reading an mmap file %d <> %d\n"
,cur_read,need_read);
- free_page (page);
- oom(current);
- put_page(area->vm_task, BAD_PAGE, address, PAGE_PRIVATE);
- return;
}
}
- if (!(error_code & PAGE_RW)) {
- if (share_page(area, area->vm_task, inode, address, error_code, page))
- return;
- }
if (clear > 0){
- #if 1
+#if 1
memset ((char*)page+PAGE_SIZE-clear,0,clear);
- #else
+#else
unsigned long tmp = page + PAGE_SIZE;
while (clear--) {
*(char *)--tmp = 0;
}
- #endif
+#endif
}
- if (put_page(area->vm_task,page,address,area->vm_page_prot))
- return;
- free_page(page);
- oom(current);
+ return page;
}
struct vm_operations_struct msdos_file_mmap = {
NULL, /* open */